// user的 处理函数

// 导入数据库
const db = require("../db/index");

// 导入bcrypt进行密码加密
const bcrypt = require("bcryptjs");
// 导入JWT
const jwt = require("jsonwebtoken");

// 注册用户的处理函数
exports.reguser = (req, res) => {
  // 接收表单数据
  const userinfo = {
    ...req.body,
    moment: new Date(),
  };
 
  //  判断数据是否合法
  if (!userinfo || !userinfo.username || !userinfo.password) {
    return res.send({ status: 1, message: "用户或密码不能为空！" });
  }
  const sql = `select * from users where username = ?`;
  db.query(sql, [userinfo.username], (err, results) => {
    // 执行语句失败
    if (err) {
      return res.send({ status: 1, message: err.message });
    }
    // 用户名被占用
    if (results.length > 0) {
      return res.send({ status: 1, message: "用户名被占用,请更换用户名！" });
    }
    // 用户名可用--
    // bcry 进行加密
    userinfo.password = bcrypt.hashSync(userinfo.password, 10);
    const sql = "insert into users set ?";
    db.query(
      sql,
      {
        username: userinfo.username,
        password: userinfo.password,
        moment: userinfo.moment,
      },
      (err, result) => {
        // 执行失败
        if (err) return res.send({ status: 1, message: err.message });
        // 执行成功但是影响行数不为1
        if (result.affectedRows !== 1) {
          return res.send({ status: 1, message: "注册用户失败，稍后再试" });
        }
        // 注册成功
        res.send({ status: 0, message: "注册成功！" });
      }
    );
  });
};

// 登录的处理函数

exports.login = (req, res) => {
  const userinfo = req.body;
  const sql = `select * from users where username = ?`;
  db.query(sql, userinfo.username, (err, results) => {
    if (err) return res.cc(err);
    if (results.length !== 1) return res.cc("登录失败！");
    // 判断输入密码是否与数据库中的一致 返回布尔 true 一致 false不一致
    const compareResult = bcrypt.compareSync(
      userinfo.password,
      results[0].password
    );
    // 如果对比为false 则用户输入的密码错误
    if (!compareResult) {
      return res.cc("登录失败！");
    }
    // 登录成功生成JWT的token字符串
    // 踢出密码与头像的值
    const user = { ...results[0], password: "", user_pic: "" };

    // 导入配置文件
    const config = require("../config/config.js");
    // 生成Token字符串
    const tokenStr = jwt.sign(user, config.jwtSecretKey, {
      expiresIn: "10h", //token 有效期为10小时
    });
    res.send({
      status: 0,
      message: "登录成功！",
      // 为了方便客户端使用Token 直接在服务器端拼接上Bearer的前缀
      token: "Bearer " + tokenStr,
    });
  });
};
